#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include <QLabel>
#include <QScrollArea>
#include <QWidget>
#include "model/data.h"

using model::Message;

///////////////////////////////////////
/// 表示消息展示区
///////////////////////////////
class MessageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    MessageShowArea();

    void addMessage(bool isLeft, const Message &message);
    void addFontMessage(bool isLeft, const Message &message);
    void clear();


private:
    QWidget* container;
};

///////////////////////////////////////
/// 表示一个消息元素
/// 这个里面要同时支持文本、图片、文件、语音消息
/// 当前只考虑文本消息，另外几个慢慢添加
///////////////////////////////
class MessageItem:public QWidget{
    Q_OBJECT
public:
    //此处的Item是不是左侧消息
    MessageItem(bool isLeft);

    //通过工厂方法 创建MessageItem的实例
    static MessageItem* makeMessageItem(bool isLeft, const Message& message);

    //添加工厂函数
    static QWidget* makeTextMessageItem(bool isLeft, const QString& text);
    static QWidget* makeImageMessageItem();
    static QWidget* makeFileMessageItem();
    static QWidget* makeSpeechMessageItem();

private:
    bool isLeft;
};

///////////////////////////////////////
/// 表示"文本消息" 正文部分
///////////////////////////////
///

class MessageContentLabel:public QWidget{
public:
    MessageContentLabel(const QString& text, bool isLeft);
    void paintEvent(QPaintEvent* event)override;
private:
    QLabel* label;
    bool isLeft;
};

#endif // MESSAGESHOWAREA_H
